package com.chenjt.jvm.first.five_heap;

/**
 * 1.设置堆空间大小的参数
 * -Xms 用来设置堆空间（新生代+老年代）的初始内存大小
 *      -X 是jvm的运行参数
 *      ms 是memory start
 * -Xmx 用来设置堆空间（新生代+老年代）的最大内存大小
 *      -X 是jvm的运行参数
 *      mx 是memory max
 *
 * 2.默认堆空间的大小
 *      初始内存大小：物理电脑内存大小 / 64
 *      最大内存大小：物理电脑内存大小 / 4
 *
 * 3.手动设置：-Xms600m -Xms600m
 *      开发中建议将初始堆内存和最大的堆内存设置成相同的值
 *      （因为不一样时，内存不够会对堆空间进行扩容，当空闲时，
 *      会对堆空间进行回收，涉及GC，频繁的话会影响性能）
 *
 * 4.查看设置的参数：方式一：jps /  jstat -gc 进程id
 *                方式二：-XX:+PrintGCDetails
 * @author chenjt
 * @date 2025/6/7 15:46
 */
public class HeapSpaceInitial {
    public static void main(String[] args) {
        // 返回Java虚拟机中的堆内存总量（totalMemory单位是byte）
        long initialMemory = Runtime.getRuntime().totalMemory() / 1024 / 1024;
        // 返回Java虚拟机试图使用的最大堆内存量（maxMemory单位是byte）
        long maxMemory = Runtime.getRuntime().maxMemory() / 1024 / 1024;

        System.out.println("初始内存（-Xms）：" + initialMemory + "M");
        System.out.println("最大内存（-Xmx）：" + maxMemory + "M");

//        System.out.println("系统内存大小为：" + initialMemory * 64.0 / 1024 + "G");
//        System.out.println("系统内存大小为：" + maxMemory * 4.0 / 1024 + "G");

        /*try {
            Thread.sleep(100000000);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }*/
    }
}
